package com.micro.ai.auth.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.micro.ai.auth.entity.DictData;

import java.util.List;

/**
 * 字典数据服务接口
 *
 * @author micro-ai
 * @since 2025-01-29
 */
public interface DictDataService extends IService<DictData> {

    /**
     * 分页查询字典数据
     *
     * @param page 分页参数
     * @param dictTypeId 字典类型ID
     * @param label 字典标签
     * @param value 字典值
     * @param status 状态
     * @return 分页结果
     */
    IPage<DictData> getDictDataPage(Page<DictData> page, String dictTypeId, String label, String value, String status);

    /**
     * 根据字典类型ID查询字典数据
     *
     * @param dictTypeId 字典类型ID
     * @return 字典数据列表
     */
    List<DictData> getByDictTypeId(String dictTypeId);

    /**
     * 根据字典类型编码查询字典数据
     *
     * @param dictTypeCode 字典类型编码
     * @param tenantId 租户ID
     * @return 字典数据列表
     */
    List<DictData> getByDictTypeCode(String dictTypeCode, String tenantId);

    /**
     * 根据字典类型编码和值查询字典数据
     *
     * @param dictTypeCode 字典类型编码
     * @param value 字典值
     * @param tenantId 租户ID
     * @return 字典数据
     */
    DictData getByDictTypeCodeAndValue(String dictTypeCode, String value, String tenantId);

    /**
     * 查询所有启用的字典数据
     *
     * @param tenantId 租户ID
     * @return 字典数据列表
     */
    List<DictData> getActiveDictData(String tenantId);

    /**
     * 创建字典数据
     *
     * @param dictData 字典数据
     * @return 是否成功
     */
    boolean createDictData(DictData dictData);

    /**
     * 更新字典数据
     *
     * @param dictData 字典数据
     * @return 是否成功
     */
    boolean updateDictData(DictData dictData);

    /**
     * 删除字典数据
     *
     * @param id 字典数据ID
     * @return 是否成功
     */
    boolean deleteDictData(String id);

    /**
     * 批量删除字典数据
     *
     * @param ids 字典数据ID列表
     * @return 是否成功
     */
    boolean batchDeleteDictData(List<String> ids);

    /**
     * 检查字典数据值是否存在
     *
     * @param dictTypeId 字典类型ID
     * @param value 字典值
     * @param excludeId 排除的ID
     * @return 是否存在
     */
    boolean existsByValue(String dictTypeId, String value, String excludeId);

    /**
     * 刷新字典缓存
     *
     * @param dictTypeCode 字典类型编码
     * @param tenantId 租户ID
     */
    void refreshDictCache(String dictTypeCode, String tenantId);
}
